package com.rock.platform.util;

import com.rock.platform.util.JsonUtils;

import net.sf.json.JSONObject;

/**
 * 处理Action返回值的辅助
 * 
 */
public class ActionJsonResult
{
    private static final String SUCCESS_KEY = "success";

    private static final String DATA_KEY = "data";
    
    /**
     * 错误信息
     */
    private static final String ERROR_KEY = "errDesc";


    private ActionJsonResult()
    {
    }

    /**
     * 取得执行成功的返回
     * 
     * @return
     * @throws Exception 
     */
    public static String getSuccessResult()
    {
        return getJsonResult(null, true, "", "");
    }
    
    /**
     * 取得执行成功的返回
     * 
     * @param <T>
     * @param entity
     * @return
     * @throws Exception 
     */
    public static <T> String getSuccessResult(T entity)
    {
        return getJsonResult(entity, true, "", "");
    }
    
    /**
     * 取得执行失败的返回�?
     * 
     * @param errDesc 错误信息
     * @return
     * @throws Exception 
     */
    public static String getErrorResult(String errDesc)
    {
        return getJsonResult(null, false, errDesc, "");
    }
    
    /**
     * 取得执行失败的返回�?
     * 
     * @param errDesc 错误信息
     * @param errStack 错误详细信息（异常堆栈信息）
     * @return
     * @throws Exception 
     */
    public static String getErrorResult(String errDesc, String errStack)
    {
        return getJsonResult(null, false, errDesc, errStack);
    }
 
    /**
     * 取得执行失败的返回�?
     * 
     * @param <T>
     * @param entity
     * @param errDesc 错误信息
     * @return
     * @throws Exception 
     */
    public static <T> String getErrorResult(T entity, String errDesc)
    {
        return getJsonResult(entity, false, errDesc, "");
    }
    
    /**
     * 取得执行失败的返回�?
     * 
     * @param <T>
     * @param entity
     * @param errDesc 错误信息
     * @param errStack 错误详细信息（异常堆栈信息）
     * @return
     * @throws Exception 
     */
    public static <T> String getErrorResult(T entity, String errDesc, String errStack)
    {
        return getJsonResult(entity, false, errDesc, errStack);
    }

    /**
     * 取得Action的返回�?
     * 
     * @param <T>
     * @param entity
     * @param success
     * @return
     * @throws Exception 
     */
    public static <T> String getJsonResult(T entity, boolean success, String errDesc, String errStack)
    {
        JSONObject obj = new JSONObject();

        obj.put(SUCCESS_KEY, success);
        if (entity == null)
            obj.put(DATA_KEY, "");
        else
            obj.put(DATA_KEY, JsonUtils.getJsonString(entity));
        obj.put(ERROR_KEY, errDesc);

        return obj.toString();
    }
}
